(clear)

(deftemplate persona
	(slot nombre)
	(slot sexo (allowed-values hombre mujer))
)

(deffacts initial-fact
    (persona (nombre Sofia) (sexo mujer))
    (persona (nombre Juan) (sexo hombre))
    (persona (nombre Carlos) (sexo hombre))
    (persona (nombre Mateo) (sexo hombre))
    (persona (nombre Calixta) (sexo mujer))
    (persona (nombre Clara) (sexo mujer))
    (persona (nombre Joao) (sexo hombre))
    (persona (nombre Amancio) (sexo hombre))
    (persona (nombre Amanda) (sexo mujer))
    (persona (nombre Pepito) (sexo hombre))
    (persona (nombre Julia) (sexo mujer))   
    (persona (nombre Mario) (sexo hombre))
    (persona (nombre Julieta) (sexo mujer))
    (persona (nombre Juanete) (sexo hombre))
    (esposos Sofia Juan)
    (padre Juan Carlos)
    (madre Sofia Carlos)
    (padre Juan Mateo)
    (madre Sofia Mateo)   
    (padre Juan Clara)
    (madre Sofia Clara)
    (esposos Mateo Calixta)
    (padre Mateo Amancio)
    (padre Mateo Amanda)
    (madre Calixta Amancio)
    (madre Calixta Amanda)
    (esposos Clara Joao)
    (padre Joao Pepito)
    (madre Clara Pepito)   
    (padre Joao Julia)
    (madre Clara Julia)   
    (esposos Julia Mario)
    (padre Julia Julieta)
    (madre Mario Julieta)   
    (padre Julia Juanete)
    (madre Mario Juanete)   
)
(reset)

(defrule r1_hermanoDePadre
    (padre ?P ?H1)
    (padre ?P ?H2)
    => (assert (hermanoDe ?H1 ?H2)))

(defrule r2_hermanoDeMadre
    (madre ?P ?H1)
    (madre ?P ?H2)
    => (assert (hermanoDe ?H1 ?H2)))

(defrule r1_eliminaSelfHermano
     ?d1 <- (hermanoDe ?H1 ?H1)
    => (retract ?d1))

(defrule r1_eliminaCombinacion
         ?d1 <- (hermanoDe ?H1 ?H2)
        (hermanoDe ?H2 ?H1)
    => (retract ?d1))
	